import { create } from 'zustand'
import { setStorage, getStorage } from '@/utils/storage'
import http from '@/utils/request'

// 定义地区数据类型
interface RegionData {
  childRegion?: RegionData[]; // 子地区数组
  fullName: string; // 全称
  name: string; // 名称
  pregion: number; // 父地区ID
  region: number; // 当前地区ID
  regionLevel: number; // 地区层级
  shortName: string; // 简称
}

interface ChinaAreasStore {
  chinaAreas: RegionData[]; // 中国地区数据
  loading: boolean; // 加载状态
  error: string | null; // 错误信息
  fetchChinaAreas: () => Promise<void>; // 异步获取地区数据
  updateChinaAreas: (chinaAreas: RegionData[]) => void; // 手动更新地区数据
}

// 从本地存储获取初始数据
const localData = getStorage('china-areas-local') || [] as RegionData[]

const useChinaAreasStore = create<ChinaAreasStore>()((set) => ({
  chinaAreas: localData, // 初始化为本地存储的数据
  loading: false, // 初始加载状态为false
  error: null, // 初始错误信息为null

  // 异步获取中国地区数据
  fetchChinaAreas: async () => {
    set({ loading: true, error: null }) // 开始加载
    try {
      // 发起API请求获取地区树数据
      const response = await http.get('/disp/sys/region/regionTree')
      // 提取子地区数据，如果为空则使用空数组
      const areasData = response.data[0]?.childRegion || []
      // 更新状态并保存到本地存储
      set({
        chinaAreas: areasData,
        loading: false
      })
      // 将数据保存到本地存储
      setStorage('china-areas-local', areasData)
    } catch (err) {
      // 处理错误情况
      set({
        error: '获取中国地区数据失败',
        loading: false
      })
      console.error('获取中国地区数据出错:', err)
    }
  },

  // 手动更新地区数据
  updateChinaAreas: (data: RegionData[]) => {
    set({
      chinaAreas: data
    })
    // 同时更新本地存储
    setStorage('china-areas-local', data)
  }
}))

export default useChinaAreasStore